package modelo.escenario.tests;

import java.util.ArrayList;
import org.junit.Test;

import modelo.carrera.Conductor;
import modelo.comportamiento.Comportamiento;
import modelo.comportamiento.Conciencia;
import modelo.controles.Control;
import modelo.escenario.Ciudad;
import modelo.escenario.Cruce;
import modelo.geometria.*;
import modelo.obstaculos.Obstaculo;
import modelo.vehiculos.Automovil;
import modelo.vehiculos.SentidoVehiculo;
import modelo.vehiculos.Vehiculo;
import static org.junit.Assert.assertTrue;


public class TestCiudad {

	@Test
	public void TestCiudad_ArmadoDeCiudad(){
	
		
		Conductor conductor = new Conductor(new Comportamiento(new Conciencia()));
		
		
		Vector posicionInicial = new Vector(23,5);
		Vector posicionFinal = new Vector(23,10);
		SentidoVehiculo sentidoVehiculo = SentidoVehiculo.NORTE;
		double largo = 3;
		double ancho = 2;
		double velocidadActual = 30;
		double velocidadMaxima = 100;
		double aceleracionMaxima = 5;
		double frenadoMaximo = 50;
		
		Automovil auto = new Automovil(conductor, posicionInicial, posicionFinal, sentidoVehiculo, largo, ancho, velocidadActual, velocidadMaxima, aceleracionMaxima, frenadoMaximo);
		
	//	Ciudad.getCiudad(); //.addObstaculo(auto);
		/*
		ArrayList<Obstaculo> obstaculos = new ArrayList<Obstaculo>();
		obstaculos = Ciudad.getCiudad().obtenerObstaculosCercanos(new Circunferencia(auto.getPosicion(),10));

		assertTrue(obstaculos.size()==2);*/
		
		//Ciudad.getCiudad().getGuiaT();
		
		//Ciudad.getCiudad().getGuiaT().existeCruce(posicionInicial);		
		// arma el recorrido
	
		Cruce cruceOrigen = Ciudad.getCiudad().getCruce(posicionInicial);
	
		Ciudad.getCiudad().getGuiaT().existeCruce(cruceOrigen);
		Cruce cruceDestino = Ciudad.getCiudad().getCruce(posicionFinal);
		if (cruceOrigen != null && cruceDestino != null) {
			
			Ciudad.getCiudad().getGuiaT().caminoMinimo(cruceOrigen, cruceDestino);	
		}
		
		
		assertTrue(Ciudad.getCiudad()!= null);
	}

	
	@Test
	public void TestCiudad_VehiculoConsultaPorObstaculosCercanos_TieneSemaforoPolicia(){
	
		
		Conductor conductor = new Conductor(new Comportamiento(new Conciencia()));
		
		
		Vector posicionInicial = new Vector(23,5);
		Vector posicionFinal = new Vector(23,10);
		SentidoVehiculo sentidoVehiculo = SentidoVehiculo.NORTE;
		double largo = 3;
		double ancho = 2;
		double velocidadActual = 30;
		double velocidadMaxima = 100;
		double aceleracionMaxima = 5;
		double frenadoMaximo = 50;
		
		Automovil auto = new Automovil(conductor, posicionInicial, posicionFinal, sentidoVehiculo, largo, ancho, velocidadActual, velocidadMaxima, aceleracionMaxima, frenadoMaximo);
		
		Ciudad.getCiudad().addObstaculo(auto);
		
		ArrayList<Obstaculo> obstaculos = new ArrayList<Obstaculo>();
		obstaculos = Ciudad.getCiudad().obtenerObstaculosCercanos(new Circunferencia(auto.getPosicion(),10));

		assertTrue(obstaculos.size()==2);
	}
	
	@Test
	public void TestCiudad_EscenarioConControles_TraeTodosLosControles(){
	
		ArrayList<Control> controles = new ArrayList<Control>();
		controles = Ciudad.getCiudad().getControles();
		
		//1 policia + 1 camara
		assertTrue(controles.size()==2);
	}
}
